#pragma once
#ifndef CLASS_DRAW 
#define CLASS_DRAW 
#include "TStyle.h"
#include "TTree.h"
#include "TChain.h"
#include <string> 
#include <vector>
#include "yaml-cpp/yaml.h"

#include "src/Lib/MessageFormat.h"
#include "src/Function/Fbasic.h"
#include "src/Class/Path.h"
#include "src/Class/Status.h"
#include "src/Class/Flow.h"
#include "src/Class/File.h"
#include "src/Class/Signal.h"
#include "src/Class/debug.h"
#include "src/Class/Event.h"
#include "src/Class/Jet.h"
#include "src/Class/lepton.h"
#include "src/Class/photon.h"
#include "src/Class/met.h"
#include "src/Class/combine.h"
#include "src/Class/recoil.h"

#include "src/Class/Tag.h"
#include "src/Class/jep.h"
#include "src/Class/global.h"
#include "src/Class/MassDrop.h"
#include "src/Class/NSubjettiness.h"
#include "src/Class/JetSubStructure.h"
#include "src/Class/BoostTag.h"
#include "src/Class/Detector.h"

#include "src/Class/Variable.h"
//#include "src/AnalyseClass/Particle.h"
//-----------------------------------------------------

class CDraw{
	public:
		std::string      steering_file;

		bool             Jpath        ;
		bool             Jstatus      ;
		bool             Jfile        ;
		bool             Jdebug       ;
		bool             Jflow        ;
		bool             Jsignal      ;
		bool             Jevent       ;
		bool             Jjet         ;
		bool             Jlepton      ;
		bool             Jmet         ;
		bool             Jphoton      ;
		bool             Jcombine     ;
		bool             Jrecoil      ;
		bool             Jtag         ;
		bool             Jglobal      ;
		bool             Jjetsub      ;
		bool             Jjep         ;
		bool             JMassDrop    ;
		bool             JNSubjettiness;
		bool             JBoostTag    ;
		bool             JDetector    ;
		bool             Jvar         ;

		CPath              path         ;
		CStatus            status       ;
		CFile              file         ;
		CDebug             debug        ;
		CFlow              flow         ;
		CSignal            signal       ;
		CEvent             event        ;
		AVariable          var          ;
		CJet               jet          ;
    	CPhoton            photon       ;
    	CLepton            lep          ;
    	CMet               met          ;
    	CCombine           comb         ;
    	CRecoil            recoil       ;
    	CGlobal            global       ;
    	CTag               tag          ;
    	CJetSubStructure   jetsub       ;
    	CJEP               jep          ;
    	CMassDrop          MassDrop     ;
    	CNSubjettiness     NSubjettiness;
		CBoostTag          BoostTag     ;
		CDetector          detector     ;

		void Init(ExRootTreeReader* treeReader){
			event.Init(treeReader);
			global.Fill_Iter=0;
		}

		CDraw(int argc, char*argv[]){
			if(argc==2){
				this->steering_file = argv[1];
			}
			else{
				this->steering_file = "control/path.dat";
			}
			std::cout<<"input file " << this->steering_file << std::endl;
		}

		void Read()         ;

		void Get_Event(long long int num){
			event.Get_Event(num);
		};

		long long int Event(){
			return(event.Event());
		};

		long long int Total_Event(){
			return(event.Total_Event());
		}

		long long int Total_Event_In_This_Run(){
			return(event.Total_Event_In_This_Run());
		}

		void Print();
};
#endif
